package com.epsilon.pos.principal.context.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.epsilon.commons.context.dao.CommonsContextDao;
import com.epsilon.commons.context.login.model.CommonsLoginException;
import com.epsilon.commons.context.model.Aplicacion;
import com.epsilon.commons.context.model.ContextoDeAplicacion;
import com.epsilon.commons.context.model.LugarDeEjecucion;
import com.epsilon.commons.context.model.RolDeUsuario;
import com.epsilon.commons.context.model.Usuario;

public class PosCommonsContextDaoImpl implements CommonsContextDao {
	
	private static final String COMMONS_CONTEXT_DAO = CommonsContextDao.class.getName();
	private static final String SELECT_CONTEXTO_DE_APLICACION_POR_LOGGIN = COMMONS_CONTEXT_DAO + ".selectContextoDeAplicacionPorLogin";
	
	private SqlSessionFactory sqlSessionFactory;
	
	public PosCommonsContextDaoImpl( SqlSessionFactory sqlSessionFactory ) {
		this.sqlSessionFactory = sqlSessionFactory;
	}
	
	@Override
	public ContextoDeAplicacion getContextoDeAplicacion( String nombreCorto, String clave, Integer idAplicacion ) throws CommonsLoginException {
		
		SqlSession sqlSession = null;
		
		try {
			sqlSession = sqlSessionFactory.openSession( false );
			
			Usuario usuario = new Usuario();
			usuario.setNombreCortoDeUsuario( nombreCorto );
			usuario.setClave( clave );
			
			ContextoDeAplicacion contexto = (ContextoDeAplicacion)sqlSession.selectOne( SELECT_CONTEXTO_DE_APLICACION_POR_LOGGIN, usuario );
			return contexto;
		}
		catch( Exception e ) {
			throw new CommonsLoginException( "" + e.getMessage() );
		}
		finally {
			if( sqlSession != null )
				sqlSession.close();	
		}
	}

	@Override
	public boolean existeUsuario( String nombreCorto, Integer idAplicacion ) throws CommonsLoginException {

		if( nombreCorto != null && nombreCorto.equals( "demonix" ) ) {
			return true;
		}

		return false;
	}

	@Override
	public List< Aplicacion > getListaDeAplicaciones() throws CommonsLoginException {
		return null;
	}

	@Override
	public List< LugarDeEjecucion > getListaDeLugaresDeEjecucion( Integer idAplicacion ) throws CommonsLoginException {
		return null;
	}

	@Override
	public List< RolDeUsuario > getListaDeRolesDeUsuario( Integer idAplicacion ) throws CommonsLoginException {
		return null;
	}

	@Override
	public List< Usuario > getListaDeUsuarios( Integer idAplicacion ) throws CommonsLoginException {
		return null;
	}
}